<?php

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Description of CompraController
 *
 * @author felipe
 */
class CompraController extends Zend_Controller_Action {
    public function init(){
            parent::init();
            $this->view->tituloPagina = "Controle de Compra";
    }
    public function indexAction(){
        $form = new App_Form_Pesquisa();
        $form->montaTipoBusca(array('co_compra'=>'Cód. Compra'
                                   ,'co_fornecedor'=>'Cód. Fornecedor'
                                   ,'no_fornecedor'=>'Fornecedor'
                                   ,'nu_nota'=>'Num. Nota Fiscal'));
        $form->setPeriodo();
        $form->setAction('javascript:;');
        $form->show();
        $this->view->form = $form;
    }
    
    public function listarAction(){
        $this->_helper->layout->disableLayout();			
        try {
            if ($this->getRequest()->isPost()) {				  
                $arrParam = array($this->_getParam('tipo_busca') => $this->_getParam('palavra_chave'));
                if($this->_getParam('dt_inicio')!=''){
                    $arrParam['dt_inicio'] = Voitech_Util::converteDataBanco($this->_getParam('dt_inicio'));
                }
                if($this->_getParam('dt_final')!=''){
                    $arrParam['dt_final'] = Voitech_Util::converteDataBanco($this->_getParam('dt_final'));
                }
                $obRepository = new App_Model_CompraRepository();                            
                $paginator = new Voitech_Paginator($obRepository->listarTodos($arrParam),$this->_getParam( 'list' ),$this->_getParam('page'));		       					    	
                $this->view->paginator	= $paginator->paginar(10);
                $this->view->div_id 	= 'div_listar_compra';
                $this->view->dataType 	= "post";
                $this->view->frmName	= "frmPesquisar";       
            }			
        }catch (Voitech_ExceptionValidate $e) {
                //echo $this->_helper->json(array('resultado'=>ERRO_VALIDACAO,'retorno'=>'Favor preencher corretamente os dados obrigatórios'));
                echo $this->_helper->json(array('resultado'=>ERRO_VALIDACAO,'retorno'=>'favor preencher dados obrigatórios'));
        }catch (Voitech_Exception $e) {
                echo $this->_helper->json(array('resultado'=>ERRO,'retorno'=>$e->getMessage()));
        }catch (Exception $e) {
                Voitech_Log::gerarLog($e->getMessage());
                echo $this->_helper->json(array('resultado'=>ERROR_GERAL,'retorno'=>$e->getMessage()));
        }			
    }
    
    public function cadastroAction() {
        $this->_helper->layout->disableLayout();
        $obFornecedorRepository = new App_Model_FornecedorRepository();
        $arObFornecedor = $obFornecedorRepository->listarTodos(array('st_ativo'=>'S'));      
        $obTipoCompraRepository = new App_Model_TipoCompraRepository();
        $arObTipoCompra = $obTipoCompraRepository->listarTodos();
        $obProdutoRepository = new App_Model_ProdutoRepository();
        $arProduto = $obProdutoRepository->listarTodos(array('st_ativo'=>'S'));
        $this->view->arFornecedor = Voitech_Util::converteModeloArrayCombo($arObFornecedor, 'CoFornecedor', "NoFornecedor",1);
        $this->view->arTipoCompra = Voitech_Util::converteModeloArrayCombo($arObTipoCompra, 'CoTipoCompra', "NoTipoCompra",1);
        $this->view->arProduto = Voitech_Util::converteModeloArrayCombo($arProduto, 'CoProduto', "NoProduto",1);
    }
    
    public function salvarAction(){
        $this->_helper->layout->disableLayout();
        $this->_helper->viewRenderer->setNoRender();
        try{
            App_Model_Db_Compra::build()->getAdapter()->beginTransaction();
            $obCompra = new App_Model_Compra(); 
            $obCompra->setNuNota($this->_getParam('nu_nota'));
            $obTipoCompra = new App_Model_TipoCompra();
            $obTipoCompra->setCoTipoCompra($this->_getParam('co_tipo_compra'));        
            $obCompra->setObTipoCompra($obTipoCompra);
            if($this->_getParam('item_compra')==''){
                throw new Voitech_Exception('Favor enviar pelo menos um item de compra');
            }
            foreach($this->_getParam('item_compra') as $item) {
                $obProduto = new App_Model_Produto();
                $obProduto->setCoProduto($item['produto']);
                $obProduto->setNuTotalProduto($item['quantidade']);

                $obItemCompra = new App_Model_ItemCompra();
                $obItemCompra->setObProduto($obProduto);
                $obItemCompra->setDsLote($item['lote']);
                $obItemCompra->setNuQuantidadeProduto($item['quantidade']);
                $obItemCompra->setNuQuantidadeUnitaria(0);
                $obItemCompra->setVlUnitario($item['valor']);

                $obCompra->adicionarItemCompra($obItemCompra);
                
                $obProdutoRepository = new App_Model_ProdutoRepository();
                $obProdutoRepository->atualizarEstoque($obProduto);   
                
            }

            $obFornecedor = new App_Model_Fornecedor();
            $obFornecedor->setCoFornecedor($this->_getParam('co_fornecedor'));                
            $obCompra->fecharCompra($obFornecedor, new App_Model_Usuario($this->view->user->getCoPessoa()));
            $obCompraMapper = new App_Model_CompraMapper($obCompra);
            $obCompraMapper->cadastrar();
            
//            $obArmazenamento = new App_Model_Armazenagem();
//            $obArmazenamento->setObCompra($obCompraMapper->getObModel());
//            $obArmazenamentoMapper = new App_Model_ArmazenagemMapper($obArmazenamento);
//            $obArmazenamentoMapper->cadastrar();
            App_Model_Db_Compra::build()->getAdapter()->commit();
            echo $this->_helper->json(array('resultado'=>OK,'retorno'=>'Operação realizada com sucesso!','id'=>$obCompraMapper->getObModel()->getCoCompra()));
        }catch(Voitech_Exception $e){
            App_Model_Db_Compra::build()->getAdapter()->rollback();
            echo $this->_helper->json(array('resultado'=>ERRO,'retorno'=>$e->getMessage()));
        }catch(Exception $e){
            App_Model_Db_Compra::build()->getAdapter()->rollback();
            Voitech_Log::gerarLog($e->getMessage());
            echo $this->_helper->json(array('resultado'=>ERROR_GERAL,'retorno'=>'Ops, ocorreu um erro no sistema'.$e->getMessage()));
        }
    }
    
    public function visualizarAction(){
        $this->_helper->layout->setLayout('clear');
        $obCompra = new App_Model_Compra();
        $obCompra->setCoCompra($this->_getParam('id'));
        $obCompraMapper = new App_Model_CompraMapper($obCompra);
        $obCompraMapper->buscarPorId();
        $this->view->obCompra = $obCompraMapper->getObModel();
    }            
}
